﻿using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Web.Mvc;
using System.Web.Routing;
using Sklep.Domain.Entities;
using Sklep.WebUI.Binders;
using Sklep.WebUI.Infrastructure;

namespace Sklep.WebUI
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(null, "", /*Odpowiada tylko pustemu adresowi URL (czyli /)*/
                            new {controller = "Product",action = "List",category = (string)null, page=1});

            routes.MapRoute(null, "Strona{page}", //Odpowiada Strona2, /Strona21, /Strona123, ale nie StronaXYZ
                            new {controller = "Product", action = "List", category = (string) null},
                            new {page = @"\d+"});

            routes.MapRoute(null, "{category}", new {controller = "Product", action = "List", page = 1});

            routes.MapRoute(null, "{category}/Strona{page}", //odpowiada /Szachy/Strona567
                            new {controller = "Product", action = "List"}, new {page = @"\d+"});


            routes.MapRoute(null, "{controller}/{action}");
        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            // Use LocalDB for Entity Framework by default
            Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);

            //var emailSettings = new EmailSettings {WriteAsFile = true};
            //var container = new UnityContainer();
            //container.RegisterType<IProductRepository, EFProductRepository>();
            //container.RegisterType<IOrderProcessor, EmailOrderProcessor>();
            //container.RegisterType<IAuthProvider, FormsAuthProvider>();

            //Rejestrowanie kontenera w bibliotece ASP.MVC 3.0
            //DependencyResolver.SetResolver(new UnityDependencyResolver(container));
            ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
            //var myIocContainer = new MyContainer();
            //MyBootstrapper.Configure(myIocContainer);
            //ControllerBuilder.Current.SetControllerFactory(new MyIocControllerFactory(myIocContainer));
            ModelBinders.Binders.Add(typeof(Cart),new CartModelBinder());
        }
    }
}